// #include <iostream>
// // 饿汉模式的单例模式
// class Singleton
// {
// private:
//     static Singleton _eton; // 实例化一个对象,这个是声明，需要在类外面定义
//     Singleton() : _data(99)
//     {
//         std::cout << "单例对象构造\n";
//         ;
//     }; // 初始化列表
//     Singleton(const Singleton &) = delete; // 禁止拷贝构造
//     ~Singleton(){};                        // 析构函数
// private:
//     int _data; // 日期
// public:
//     // 给类外调用的接口,获得类的信息。
//     static Singleton &getInstance()
//     {
//         return _eton;
//     }
//     int getData()
//     {
//         return _data;
//     }
// };
// Singleton Singleton::_eton;

// int main()
// {
//     std::cout << Singleton::getInstance().getData(); // 获得实例化后对象的信息；
//     return 0;
// }
#include <iostream>
// 懒汉模式的单例模式：定义对象的时候不是直接实例化对象
class Singleton
{
private:
    Singleton() : _data(99)
    {
        std::cout << "单例对象构造\n";
        ;
    }; // 初始化列表
    Singleton(const Singleton &) = delete; // 禁止拷贝构造
    ~Singleton(){};                        // 析构函数
private:
    int _data; // 日期
public:
    // 给类外调用的接口,获得类的信息。
    static Singleton &getInstance()
    {
        static Singleton _eton; // c++11之后才开始这么做，c++11之前都是先定义一个对象指针，如果是空就不实例化对象，不是空就new对象，存在线程安全的问题，要加锁
        return _eton;
    }
    int getData()
    {
        return _data;
    }
};
int main()
{
    std::cout << Singleton::getInstance().getData(); // 获得实例化后对象的信息；
    return 0;
}